/**
 * Classe responsavel pela manipulação dos documentos no banco de dados
 * SQlServer
 */
package br.inf.acesso.bancodedados.sqlserver;

import br.inf.acesso.bancodedados.ConexaoSQLServer;
import br.inf.acesso.regrasdenegocios.geral.Documento;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 * @author Douglas Giordano
 * @since 28/04/2013
 */
public class BDDocumentoEmp {

    private String dataInicial;
    private String dataFinal;
    private ConexaoSQLServer conexao;
    private ResultSet rs;

    public BDDocumentoEmp(String dataInicial, String dataFinal) {
        conexao = new ConexaoSQLServer();
        this.dataInicial = dataInicial;
        this.dataFinal = dataFinal;
    }

    public BDDocumentoEmp() {
        conexao = new ConexaoSQLServer();
    }

    public ArrayList<Documento> docNFEntradas() throws SQLException {
        Documento doc;
        ArrayList<Documento> listaDocEntradas = new ArrayList<Documento>();

        rs = conexao.select("Select * From TBL_COMPRAS_NOTAFISCAL_ENTRADA WHERE CD_STATUS <> 1" + "and"
                + " DT_EMISSAO BETWEEN '" + dataInicial + "' AND '" + dataFinal + "'");
        while (rs.next()) {
            doc = new Documento(rs.getInt("NR_DOCUMENTO"), rs.getDouble("VL_TOTAL"), "NFE", rs.getInt("CD_ENTRADA"));
            listaDocEntradas.add(doc);
        }
        return listaDocEntradas;
    }

    public ArrayList<Documento> docNFSaidas() throws SQLException {
        Documento doc;
        ArrayList<Documento> listaDocSaidas = new ArrayList<Documento>();

        rs = conexao.select("Select * From TBL_NOTAS_FATURAMENTO WHERE CD_STATUS<> 1" + "and"
                + " DT_EMISSAO BETWEEN '" + dataInicial + "' AND '" + dataFinal + "'");
        while (rs.next()) {
            doc = new Documento(rs.getInt("NR_DOCUMENTO"), rs.getDouble("VL_TOTAL"), "NFV", rs.getInt("CD_LANCAMENTO"));
            listaDocSaidas.add(doc);
        }
        return listaDocSaidas;

    }

    public ArrayList<Documento> docNFOutrasEnt() throws SQLException {
        Documento doc;
        ArrayList<Documento> listaDocOutEntradas = new ArrayList<Documento>();
        rs = conexao.select("Select * From TBL_NOTAS_EMITIDAS WHERE CD_STATUS <> 1" + "and"
                + " DT_EMISSAO BETWEEN '" + dataInicial + "' AND '" + dataFinal + "'");
        while (rs.next()) {
            doc = new Documento(rs.getInt("NR_DOCUMENTO"), rs.getDouble("VL_TOTAL"), rs.getInt("CD_NOTA"));
            String tpDocumento = rs.getInt("CD_TIPODOCUMENTO") + "";
            ResultSet rs2 = conexao.select("SELECT * FROM TBL_TIPO_DOCUMENTOS WHERE CD_TIPODOCUMENTO = " + tpDocumento);
            int operacao = 0;
            while (rs2.next()) {
                operacao = rs2.getInt("CD_OPERACAO");
            }
            if (operacao == 1) {
                doc.setOrigem("NFOE");
                listaDocOutEntradas.add(doc);
            }
        }
        return listaDocOutEntradas;

    }

    public ArrayList<Documento> docNFOutrasSai() throws SQLException {
        Documento doc;
        ArrayList<Documento> listaDocOutSaidas = new ArrayList<Documento>();
        rs = conexao.select("Select * From TBL_NOTAS_EMITIDAS WHERE CD_STATUS <> 1" + "and"
                + " DT_EMISSAO BETWEEN '" + dataInicial + "' AND '" + dataFinal + "'");
        while (rs.next()) {
            doc = new Documento(rs.getInt("NR_DOCUMENTO"), rs.getDouble("VL_TOTAL"), rs.getInt("CD_NOTA"));
            String tpDocumento = rs.getInt("CD_TIPODOCUMENTO") + "";
            ResultSet rs2 = conexao.select("SELECT * FROM TBL_TIPO_DOCUMENTOS WHERE CD_TIPODOCUMENTO = " + tpDocumento);
            int operacao = 0;
            while (rs2.next()) {
                operacao = rs2.getInt("CD_OPERACAO");
            }
            if (operacao == 2) {
                doc.setOrigem("NFOS");
                listaDocOutSaidas.add(doc);
            }
        }
        return listaDocOutSaidas;
    }

    public Documento docNFEntradas(String codigoNF) throws SQLException {
        Documento doc = null;
        BDDocumentoItemEmp bDDocumentoItemEmp = new BDDocumentoItemEmp(Integer.parseInt(codigoNF));
        rs = conexao.select("Select * From TBL_COMPRAS_NOTAFISCAL_ENTRADA WHERE CD_ENTRADA = "+codigoNF);
        while (rs.next()) {
            doc = new Documento(rs.getInt("NR_DOCUMENTO"), rs.getDouble("VL_TOTAL"), "NFE", rs.getInt("CD_ENTRADA"));
            doc.setItens(bDDocumentoItemEmp.itensDocEntrada());
        }
        bDDocumentoItemEmp.desconectar();
        return doc;
    }

    public Documento docNFSaidas(String codigoNF) throws SQLException {
        Documento doc = null;
        BDDocumentoItemEmp bDDocumentoItemEmp = new BDDocumentoItemEmp(Integer.parseInt(codigoNF));
        rs = conexao.select("Select * From TBL_NOTAS_FATURAMENTO WHERE CD_LANCAMENTO = "+codigoNF);
        while (rs.next()) {
            doc = new Documento(rs.getInt("NR_DOCUMENTO"), rs.getDouble("VL_TOTAL"), "NFV", rs.getInt("CD_LANCAMENTO"));
            doc.setItens(bDDocumentoItemEmp.itensDocSaida());
        }
        bDDocumentoItemEmp.desconectar();
        return doc;

    }

    public Documento docNFOutras(String codigoNF) throws SQLException {
        Documento doc = null;
        BDDocumentoItemEmp bDDocumentoItemEmp = new BDDocumentoItemEmp(Integer.parseInt(codigoNF));
        rs = conexao.select("Select * From TBL_NOTAS_EMITIDAS WHERE CD_NOTA = "+codigoNF);
        while (rs.next()) {
            doc = new Documento(rs.getInt("NR_DOCUMENTO"), rs.getDouble("VL_TOTAL"),"NFO", rs.getInt("CD_NOTA"));
            doc.setItens(bDDocumentoItemEmp.itensDocOutras());
        }
        bDDocumentoItemEmp.desconectar();
        return doc;
    }

    public void desconectar() {
        conexao.desconectar();
    }
}
